package com.cn.gmall.model.list;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.DateFormat;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;
import java.util.List;

// Index = goods , Type = info  es 7.8.0 逐渐淡化type！  修改！
//表示该字段是一个文本，并作最大程度拆分，默认建立索引

/**
 * indexName 参数指定了索引的名称，这里设置为 “goods”。
 * 索引在Elasticsearch中是一个用于存储、检索和索引文档的逻辑命名空间。
 *
 * shards 参数指定了索引被分成的主分片数量，这里设置为 3。
 * 主分片用于将索引的数据分发到多个节点上，以提高并发和可伸缩性。
 *
 * replicas 参数指定了每个主分片的副本数量，这里设置为 2。
 * 副本是主分片的精确复制，用于提供冗余和高可用性。副本可以分布在不同的节点上，从而减轻负载并提高读取速度。
 */
@Data
@Document(indexName = "goods" , shards = 3,replicas = 2)
public class Goods {
    // 商品Id skuId
    @Id
    private Long id;

    @Field(type = FieldType.Keyword, index = false)
    private String defaultImg;

    //  es 中能分词的字段，这个字段数据类型必须是 text！keyword 不分词！表示该字段是一个文本，并作最大程度拆分，默认建立索引
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String title;

    @Field(type = FieldType.Double)
    private Double price;

    //  @Field(type = FieldType.Date)   6.8.1
//    表示该字段是一个文本，日期类型，默认不建立索引
    @Field(type = FieldType.Date,format = DateFormat.custom,pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime; // 新品

    @Field(type = FieldType.Long)
    private Long tmId;

//   表示该字段内容是一个文本并作为一个整体不可分，默认建立索引
    @Field(type = FieldType.Keyword)
    private String tmName;

    @Field(type = FieldType.Keyword)
    private String tmLogoUrl;
//表示该字段是一个长整型，默认建立索引
    @Field(type = FieldType.Long)
    private Long category1Id;

    @Field(type = FieldType.Keyword)
    private String category1Name;

    @Field(type = FieldType.Long)
    private Long category2Id;

    @Field(type = FieldType.Keyword)
    private String category2Name;

    @Field(type = FieldType.Long)
    private Long category3Id;

    @Field(type = FieldType.Keyword)
    private String category3Name;

    //  商品的热度！ 我们将商品被用户点查看的次数越多，则说明热度就越高！
    @Field(type = FieldType.Long)
    private Long hotScore = 0L;

    // 平台属性集合对象
    // Nested 支持嵌套查询
    @Field(type = FieldType.Nested)
    private List<com.cn.gmall.model.list.SearchAttr> attrs;

}
